As technology advances, data storage is increasingly important and data storage capacities are increasing rapidly. Correspondingly, the size of data storage arrays and their demands for storage have increased rapidly. Ever increasing amounts of data are required to be highly available and protected from corruption or damage that may be caused by any of a variety of factors, such as natural disasters and power failures, etc. As a result, increasingly complex data storage clusters are used to satisfy the demands for data storage and retrieval.
One conventional setup is to have a cluster of object based servers that handle requests from clients. As requests are received from the clients, the servers of the cluster access object based information to perform the requests from the clients. Each object may be assigned and tracked by an inode number and there are a specific set of inode numbers available for objects. As each inode number is allocated or deallocated, the other servers in the cluster need to be updated so that the tracking of inode numbers is synchronized throughout the cluster. This synchronization is done to ensure that when an inode number is allocated by one metadata server the other metadata servers cannot allocate the same inode number. Thus, the allocation information has to be shared by each metadata server and needs to be synchronized upon each update. The updating of object information can require a cluster wide lock of object information each time object information is updated. This synchronization thus requires significant amount of communication among the servers of the cluster. The communication requirements of synchronizing each of the servers in the cluster thereby both impacts and limits the performance of the metadata servers.
Thus, a need exists to maintain object based information without requiring communication among the servers each time object information is updated.